SELECT û instrukcja i FROM û przyk│ad klauzuli
W niekt≤rych z poni┐szych przyk│ad≤w przyjΩto, ┐e w tabeli Pracownicy znajduje siΩ pole Zarobki. Nale┐y zauwa┐yµ, ┐e w tabeli Pracownicy znajduj╣cej siΩ w bazie danych Northwind nie ma takiego pola.
W tym przyk│adzie tworzony jest obiekt Recordset typu zestaw dynamiczny bazuj╣cy na instrukcji SQL, kt≤ry wybiera pola Nazwisko i ImiΩ ze wszystkich rekord≤w tabeli Pracownicy. Wywo│ywana jest procedura WyliczPola drukuj╣ca zawarto£µ obiektu Recordset w oknie.
Sub SelectX1()
Dim dbs As Database, rst As Recordset
' Zmodyfikuj ten wiersz tak, by £cie┐ka wskazywa│a
' na rzeczywist╣ bazΩ danych Northwind.
Set dbs = OpenDatabase("Northwind.mdb")
' Wybierz nazwiska i imiona ze wszystkich
' rekord≤w tabeli Pracownicy.
Set rst = dbs.OpenRecordset("SELECT Nazwisko, "
& "ImiΩ FROM Pracownicy;")
' Zape│nij obiekt Recordset.
rst.MoveLast
' Wywo│aj procedurΩ WyliczPola w celu
' wydrukowania zawarto£ci obiektu Recordset.
WyliczPola rst,12
dbs.Close
End Sub
W tym przyk│adzie znajdowana jest liczba rekord≤w zawieraj╣cych warto£µ w polu KodPocztowy, a zwracane pole otrzymuje nazwΩ Licznik.
Sub SelectX2()
Dim dbs As Database, rst As Recordset
' Zmodyfikuj ten wiersz tak, by £cie┐ka wskazywa│a
' na rzeczywist╣ bazΩ danych Northwind.
Set dbs = OpenDatabase("Northwind.mdb")
' Policz rekordy zawieraj╣ce warto£µ KodPocztowy
' i zwr≤µ w polu Licznik znalezion╣ liczbΩ
' rekord≤w.
Set rst = dbs.OpenRecordset("SELECT Count " _
& "(KodPocztowy) AS Licznik FROM Klienci;")
' Zape│nij obiekt Recordset.
rst.MoveLast
' Wywo│aj procedurΩ WyliczPola w celu wydrukowania
' zawarto£ci obiektu Recordset. ' Okre£l szeroko£µ pola = 12.
WyliczPola rst, 12
dbs.Close
End Sub
W tym przyk│adzie zostaje znaleziona i wy£wietlona liczba pracownik≤w oraz ich przeciΩtne i maksymalne wynagrodzenie.
Sub SelectX3()
Dim dbs As Database, rst As Recordset
' Zmodyfikuj ten wiersz tak, by £cie┐ka wskazywa│a
' na rzeczywist╣ bazΩ danych Northwind.
Set dbs = OpenDatabase("Northwind.mdb")
' Policz pracownik≤w, oblicz przeciΩtne
' wynagrodzenie i zwr≤µ maksymalne wynagrodzenie.
Set rst = dbs.OpenRecordset("SELECT Count (*) " _
& "AS RazemPracownik≤w, Avg(Wynagrodzenie) " _
& "AS PrzeciΩtneWynagr, Max(Wynagrodzenie) " _
& "AS MaksymalneWynagr FROM Pracownicy;")
' Zape│nij obiekt Recordset.
rst.MoveLast
' Wywo│aj procedurΩ WyliczPola w celu wydrukowania
' zawarto£ci obiektu Recordset. Przeka┐ obiekt ' Recordset i
' wymagan╣ szeroko£µ pola.
WyliczPola rst, 17
dbs.Close
End Sub
Obiekt Recordset jest przekazywany do procedury Sub o nazwie WyliczPola. NastΩpnie procedura ta formatuje i drukuje pola obiektu Recordset w oknie Debug. Zmienna intD│Pola zawiera wymagan╣ szeroko£µ drukowanego pola. Niekt≤re pola mog╣ zostaµ obciΩte.
Sub WyliczPola(rst As Recordset, intD│Pola As Integer)
Dim lngRekordy As Long, lngPola As Long
Dim lngLiczRek As Long, lngLiczPol As Long
Dim strTytu│ As String, strTymcz As String
' W zmiennej lngRekordy umie£µ liczbΩ
' rekord≤w obiektu Recordset.
lngRekordy = rst.RecordCount
' W zmiennej lngPola umie£µ liczbΩ
' p≤l obiektu Recordset.
lngPola = rst.Fields.Count
Debug.Print "Liczba rekord≤w: " & lngRekordy _
& " Liczba p≤l w rekordzie: "
& lngPola
Debug.Print
' Utw≤rz ci╣g znak≤w s│u┐╣cy do drukowania nag│≤wka
' kolumny.
strTytu│ = "Rekord "
For lngLiczPol = 0 To lngPola - 1
strTytu│ = strTytu│ _
& Left(rst.Fields(lngLiczPol).Name _
& Space(intD│Pola), intD│Pola)
Next lngLiczPol
' Drukuj nag│≤wek kolumny.
Debug.Print strTytu│
Debug.Print
' Przejdƒ w pΩtli przez wszystkie elementy ' obiektu Recordset;
' wydrukuj liczbΩ rekord≤w i warto£ci pol.
rst.MoveFirst
For lngLiczRek = 0 To lngRecordy - 1
Debug.Print Right(Space(6) & _
Str(lngLiczRek), 6) & " ";
For lngLiczPol = 0 To lngPola - 1
' Sprawdƒ, czy warto£µ jest r≤wna Null.
If IsNull(rst.Fields(lngLiczPol)) Then
strTymcz = "<puste>"
Else
' Wpisz w strTymcz zawarto£µ pola.
Select Case _
rst.Fields(lngLiczPol).Type
Case 11
strTymcz = ""
Case dbText, dbMemo
strTymcz = _
rst.Fields(lngLiczPol)
Case Else
strTymcz = _
str(rst.Fields(lngLiczPol))
End Select
End If
Debug.Print Left(strTymcz _
& Space(intD│Pola), intD│Pola);
Next lngLiczPol
Debug.Print
rst.MoveNext
Next lngLiczRek
End Sub